module CortesEspecificosDeUsuarioWindow (cortesEspecificosDeUsuarioWindow) where

{-
AUTOR:Gaston Charkiewicz
DESCRIPCION: esta ventana muestra los cortes que se hizo un usuario en particular, pudiendo
seleccionar algun corte realizado para ver sus caracteristicas, y ademas poder crear uno nuevo.
OBSERVACIONES:
-}

import Graphics.UI.Gtk
import Graphics.UI.Gtk.ModelView as Model
import Customer
import PerformedHaircut
import WindowPerformedHaircutDetails
import WindowUtils
import Data.IORef
import MainHandler
import AniadirNuevoCorteWindow

cortesEspecificosDeUsuarioWindow :: IO Customer -> IORef MainHandler -> IO()
cortesEspecificosDeUsuarioWindow unUsuario dataBase = do
  initGUI
  -- "Desencapsulo" el cliente recibido por parametro
  modelCustomer <- unUsuario
  -- Preparo la ventana
  window <- windowNew
  window `onDestroy` mainQuit
  windowSetPosition window WinPosCenter
    
  --Determino el container principal y los dos auxiliares
  vbox <- vBoxNew False 10
  headerHBox <- hBoxNew True 6
  buttonsHBox <- hBoxNew True 1
  -- label de Fantasia para que no quede pegado arriba
  fantasiaLabel <- labelNew (Just "")
  -- Label Usuario
  nombreDeUsuarioLabel <- labelNew (Just "Usuario:")
  -- Label con el id del usuario
  idDeUsuarioLabel <- labelNew (Just "")
  labelSetText idDeUsuarioLabel (getCustomerName modelCustomer)  
  labelSetJustify idDeUsuarioLabel JustifyCenter
  labelSetLineWrap idDeUsuarioLabel True
  
  -- Label Cortes Realizados al mismo
  cortesRealizadosLabel <- labelNew (Just "Cortes Realizados al mismo:")
  -- Lista con los cortes
  ---------------------------FLASH--------------------------------
  ----------------------------------------------------------------
  list <- listStoreNew (getPerformedHaircutsAsStrings modelCustomer)
  treeview <- Model.treeViewNewWithModel list
  Model.treeViewSetHeadersVisible treeview True
  
  col <- Model.treeViewColumnNew
  Model.treeViewColumnSetTitle col "Tipo de corte"
  renderer <- Model.cellRendererTextNew
  Model.cellLayoutPackStart col renderer False
  Model.cellLayoutSetAttributes col renderer list
      $ \ind -> [Model.cellText := ind]
  Model.treeViewAppendColumn treeview col   
  
  tree <- Model.treeViewGetSelection treeview
  Model.treeSelectionSetMode tree  SelectionSingle
  Model.onSelectionChanged tree (oneSelection list tree)
  
  -------------------------EOFLASH-------------------------------
  ---------------------------------------------------------------
  
  -- Los dos botones que añadire al segundo auxiliar
  detallesButton <- buttonNewWithLabel "Detalles"
  detallesButton `onClicked` windowPerformedHaircutDetails (getSelectedOf (getHisPerformedHaircuts modelCustomer) tree)
  añadirUnoNuevoButton <- buttonNewWithLabel "Añadir uno Nuevo"
  añadirUnoNuevoButton `onClicked` (aniadirNuevoCorteWindow modelCustomer dataBase)
  -- Boton para volver
  volverButton <- buttonNewWithLabel "Volver"
  volverButton `onClicked` (widgetDestroy window) 
  
    --Preparo la ventana a gusto
  set window [windowTitle := "Cortes de Usuario",windowDefaultWidth := 300,
        windowDefaultHeight := 500, containerBorderWidth := 10, containerChild := vbox]
        
  --Agrego los dos fields a la primera box auxiliar
  boxPackStart headerHBox nombreDeUsuarioLabel PackNatural 1
  boxPackStart headerHBox idDeUsuarioLabel PackNatural 1
  --Agrego los dos fields a la segunda box auxiliar
  boxPackStart buttonsHBox detallesButton PackGrow 1
  boxPackStart buttonsHBox añadirUnoNuevoButton PackGrow 1
  
  --Ahora agrego todo al box principal, que es el vBox
  boxPackStart vbox fantasiaLabel PackNatural 1
  boxPackStart vbox headerHBox PackNatural 1
  boxPackStart vbox cortesRealizadosLabel PackNatural 1
  boxPackStart vbox treeview PackNatural 1
  boxPackEnd vbox volverButton PackNatural 1
  boxPackEnd vbox buttonsHBox PackNatural 1
    
  -- Finalmente le digo a la ventana que muestre todo lo que tiene
  widgetShowAll window
  mainGUI
  
  
  ------------------------------------------------------------------------
  ---------------------FUNCIONES DE CONTROL-------------------------------
  ------------------------------------------------------------------------
  
oneSelection :: ListStore String -> Model.TreeSelection ->  IO ()
oneSelection list tree = do
  sel <- Model.treeSelectionGetSelectedRows tree
  let s = head  (head sel)
  v <- Model.listStoreGetValue list s
  putStrLn $ "selected " ++ v
  
  ------------------------------------------------------------------------
  
getSelectedOf :: [PerformedHaircut] -> Model.TreeSelection ->  IO PerformedHaircut
getSelectedOf list tree = do
  sel <- Model.treeSelectionGetSelectedRows tree
  let s = head  (head sel)
  let pf = (searchByIndex s list)
  return pf